package cluster

import (
	"k8s.io/client-go/kubernetes"
	"k8s.io/client-go/tools/clientcmd"
)

// ClusterInfo 定义一个结构体，用于描述创建集群所用的配置信息 用于查询的操作
type ClusterInfo struct {
	Id          string `json:"id"`          // secret的名字
	DisplayName string `json:"displayName"` // 集群的别名 开发集群，测试集群 ... ..
	City        string `json:"city"`        // 集群的位置
	District    string `json:"district"`    // 所在区域
}

// ClusterStatus 定义一个结构体 ，用于描述集群的状态
type ClusterStatus struct {
	ClusterInfo
	Version string `json:"version"` // 集群的版本
	Status  string `json:"status"`  // 集群是否可用
}

// ClusterConfig 定义一个结构体，用于描述创建集群所用的配置信息 用于创建时的操作
type ClusterConfig struct {
	ClusterInfo
	Kubeconfig string `json:"kubeconfig"` // 集群的config文件
}

// 结构体的方法，用于判断集群的状态
func (c *ClusterConfig) getClusterStatus() (ClusterStatus, error) {
	// 判断集群状态是否正常
	clusterStatus := ClusterStatus{}
	clusterStatus.ClusterInfo = c.ClusterInfo
	// 创建一个clientSet  前端传过来的是 kubeconfig的字符串， 根据字符串信息创建集群

	restConfig, err := clientcmd.RESTConfigFromKubeConfig([]byte(c.Kubeconfig))
	if err != nil {

		return clusterStatus, err
	}
	clientset, err := kubernetes.NewForConfig(restConfig)
	if err != nil {
		return clusterStatus, err
	}
	serverVersion, err := clientset.Discovery().ServerVersion()
	if err != nil {
		return clusterStatus, err
	}
	ClusterVersion := serverVersion.String()
	clusterStatus.Version = ClusterVersion
	clusterStatus.Status = "Active"
	return clusterStatus, nil
}
